////////////////////////////////////////////////////////////////////////////////

#ifndef _CIRCLE_H_
#define _CIRCLE_H_

////////////////////////////////////////////////////////////////////////////////

#ifndef _SHAPE_H_
#include "shape.h"
#endif

#ifndef _PHYSICALTYPES_H_
#include "physicaltypes.h"
#endif

////////////////////////////////////////////////////////////////////////////////


/** Physical engine namespace */
namespace PE
{
////////////////////////////////////////////////////////////////////////////////

    struct Circle;
    struct Polygon;

////////////////////////////////////////////////////////////////////////////////

    /** Class for circle shape
    *
    *  @author   Anastasia Karpinska
    *  @since    Dec 5th, 2009
    *  @updated  Dec 5th, 2009
    *
    */
    struct Circle : public Shape
    {
    ////////////////////////////////////////////////////////////////////////////


        /** Radius */
        double m_Radius;


    ////////////////////////////////////////////////////////////////////////////


        /** Constructor */
        Circle( double _radius ) : m_Radius(_radius) {}

       
        /** Returns shapes intersector */
        virtual Intersector& GetIntersector( const Shape& _shape ) const;


        /** Returns shapes intersector for shape with circle */
        virtual Intersector& GetCircleIntersector() const;


        /** Returns shapes intersector for shape with polygon */
        virtual Intersector& GetPolygonIntersector() const;


    ////////////////////////////////////////////////////////////////////////////

    };


////////////////////////////////////////////////////////////////////////////////

};

////////////////////////////////////////////////////////////////////////////////

#endif

////////////////////////////////////////////////////////////////////////////////
